package com.feather.common.db;

import java.sql.SQLException;

/**
 * @author flogyin
 */
public interface TransactConnector extends Connector {
	Transaction begin() throws SQLException;

	/**
	 * @param int isolationLevel 事务隔离登记
	 */
	Transaction begin(int isolationLevel) throws SQLException;
}

/*
 * 1.JDBC在Connection中定义的事务级别有下面几个: (级别 值) TRANSACTION_READ_UNCOMMITTED 1
 * TRANSACTION_READ_COMMITTED 2 TRANSACTION_REPEATABLE_READ 4
 * TRANSACTION_SERIALIZABLE 8
 * 
 * 2.而oracle支持的级别只有TRANSACTION_READ_COMMITTED、TRANSACTION_SERIALIZABLE
 * 
 * 
 * 作用： 1:保证数据的正确性，保证如下特征： a:原子性：如果因故障中断，则所有结果都撤消 b:一致性：事务处理的结果保留不变的特性
 * c:孤立性：中间状态对其他事务是不可见的 d:持久性：完成事务的结果是持久的 2:事务终止的两种方式： a提交，一个事务使其结果永久不变，
 * b回滚，撤消所有更改回到原来状态。
 * 
 * 3:解决数据同时读取的三个问题： a:脏读取：一个事务读取了另外一个并行事务未提交的数据 b:不可重复读取：一个事务再次读取之前的
 * 数据时得到的数据不一致，被另外一个事务修改 c:虚读：一个事务重新执行一个查询，返回的记录包含了其他事务提交的新记录
 * 
 * 4:解决办法： 设定事务的隔离级别：con.setTransactionIsolation(Connection.isolationLevel);
 * 四种隔离级别：
 * con.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);/
 * /最底级别：只保证不会读到非法数据，上述3个问题有可能发生
 * con.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
 * //默认级别：可以防止脏读
 * con.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ
 * );//可以防止脏读和不可重复读取
 * con.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
 * //最高级别：防止上述3种情况，事务串行执行
 */